{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn import datasets\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from sklearn.metrics import zero_one_loss\n",
    "from sklearn.datasets import load_boston\n",
    "from sklearn.ensemble import AdaBoostRegressor\n",
    "from sklearn.ensemble import AdaBoostClassifier\n",
    "from sklearn.tree import DecisionTreeRegressor\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.neighbors import KNeighborsRegressor\n",
    "\n",
    "plt.rcParams['font.family'] = ['Arial Unicode MS'] #用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = load_boston()\n",
    "train_X, test_X, train_y, test_y = train_test_split(data.data, data.target, test_size=0.25, random_state=33)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "房价预测结果： [19.22941176 11.12571429 12.8        17.80631579 24.21287129 21.72222222\n",
      " 29.54761905 18.45612245 31.15       19.73103448 28.16980198 32.225\n",
      " 11.425      25.44193548 13.9        24.8        17.80631579 16.81\n",
      " 27.65114504 25.44193548 17.93636364 18.05892857 17.80631579 19.73103448\n",
      " 31.15       18.45612245 21.05525292 25.44193548 11.425      32.96632124\n",
      " 17.80631579 26.73020408 11.39833333 20.77184466 27.03755656 31.68\n",
      " 26.65786517 12.51129032 14.2703125  26.00740741 15.56818182 11.64375\n",
      " 29.54761905 17.80631579 27.26363636 19.19032258 17.80631579 19.44480519\n",
      " 26.73020408 19.44480519 17.80631579 34.04661017 15.5872093  17.93636364\n",
      " 26.43591837 20.5116129  26.33862434 16.31162791 25.70934066 24.02197309\n",
      " 19.44480519 16.48382353 43.71724138 20.4122807  17.56129032 26.73020408\n",
      " 26.65786517 11.64375    18.79116022 27.7720339  21.72222222 18.79116022\n",
      " 18.02       27.16134454 19.44480519 47.38571429 15.5872093  11.39833333\n",
      " 17.74910714 24.8        20.02682927 15.85333333 13.584      26.17142857\n",
      " 20.83555556 20.88513514 47.55135135 17.264      42.95       29.54761905\n",
      " 27.9464455  19.44480519 18.9969697  17.57727273 15.5872093  34.1483871\n",
      " 24.21287129 24.02197309 18.79116022 18.79116022 15.5872093  19.73103448\n",
      " 27.55       26.43591837 11.39833333 15.5872093  11.64375    27.26363636\n",
      " 12.51129032 26.65786517 50.         13.584      17.80631579 25.70934066\n",
      " 32.99137931 25.70934066 21.05525292 20.5116129  27.65114504 20.5116129\n",
      " 19.73103448 18.79116022 12.77619048 20.34836066 21.05525292 17.74910714\n",
      " 43.025     ]\n",
      "均方误差： 19.03\n"
     ]
    }
   ],
   "source": [
    "# AdaBoost\n",
    "regressor = AdaBoostRegressor()\n",
    "regressor.fit(train_X, train_y)\n",
    "pred_y = regressor.predict(test_X)\n",
    "mse = mean_squared_error(test_y, pred_y)\n",
    "print('房价预测结果：', pred_y)\n",
    "print('均方误差：', round(mse, 2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "决策树军方误差： 16.58\n"
     ]
    }
   ],
   "source": [
    "# 决策树\n",
    "dec_regressor = DecisionTreeRegressor()\n",
    "dec_regressor.fit(train_X, train_y)\n",
    "pred = dec_regressor.predict(test_X)\n",
    "mse = mean_squared_error(test_y, pred_y)\n",
    "print('决策树军方误差：', round(mes, 2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "KNN均方误差： 27.77\n"
     ]
    }
   ],
   "source": [
    "# KNN\n",
    "knn_regressor = KNeighborsRegressor()\n",
    "knn_regressor.fit(train_X, train_y)\n",
    "pred_y = knn_regressor.predict(test_X)\n",
    "mse = mean_squared_error(test_y, pred_y)\n",
    "print('KNN均方误差：', round(mse, 2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "X, y = datasets.make_hastie_10_2(n_samples=12000, random_state=1) # 生成二分类数据\n",
    "test_X, test_y = X[:200], y[0:200]\n",
    "train_X, train_y = X[2000:], y[2000:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.49"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 弱分类器\n",
    "dt_stump = DecisionTreeClassifier(max_depth=1, min_samples_leaf=1)\n",
    "dt_stump.fit(train_X, train_y)\n",
    "dt_stump_err = 1.0 - dt_stump.score(test_X, test_y)\n",
    "dt_stump_err"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.24"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 决策树分类器\n",
    "dt = DecisionTreeClassifier()\n",
    "dt.fit(train_X, train_y)\n",
    "dt_err = 1.0 - dt.score(test_X, test_y)\n",
    "dt_err"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "AdaBoostClassifier(algorithm='SAMME.R',\n",
       "          base_estimator=DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=1,\n",
       "            max_features=None, max_leaf_nodes=None,\n",
       "            min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "            min_samples_leaf=1, min_samples_split=2,\n",
       "            min_weight_fraction_leaf=0.0, presort=False, random_state=None,\n",
       "            splitter='best'),\n",
       "          learning_rate=1.0, n_estimators=200, random_state=None)"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# AdaBoost分类器\n",
    "ada = AdaBoostClassifier(base_estimator=dt_stump, n_estimators=200)\n",
    "ada.fit(train_X, train_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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I0aMoFKlSjz55JPk5uYyevRomjdvDkDjxo0ZOXIkjRs3Ztq0aZx66qkAbNmyhfnz5wNQtmxZpk+fznnnnUdOTg7du3dnyJAhzJgxgwoVKkTre/vtt6lfvz4PPvggAwcOZPny5XTt2pWcnByuvPJKcnJyyMzMZObMmfzqV7+ia9eu9O3bl+7duxf4PSQnJ0e/P/vssxk4cCB16tThzjvvZNu2bdSpU4dhw4bRtm3bQvztx4YBtjCkVwcCe2AlSZKkH/BDwWhf2Nq+fTudOnU6oL1nz5707NmTtWvXcsUVVxRoy8nJOazn5uXlcf3117N06VIAvvjiC6ZOnUpSUhI7duygbt26nHrqqYwfP54bbriBEiVKkJycTJkyZZgwYQI1atSgSpUqhGHIpEmTKFmyJA0aNOC1116jY8eO3HjjjfTp06fAM8eMGUP16tXp378/FSpUiNa+rwaIzGW98847o3NnMzMzycvLo3Llylx88cW0aNECgCAI+OSTT1i1ahVPPPEEXbp04Y033qBs2bJs376drl270qhRIxo1akRqairTp08nNTWVatWqsWDBAj766COuv/56MjIyANixYwdDhw5lypQp3HjjjSxZsoQePXpw4403kp2dzZAhQ5gwYQLly5c/rN9vPBhgC0NyCqRXM8BKkiRJCWTKlCmcccYZjBs3jrVr19KjRw/y8/OZMGFCNNQtWLCA2rVrc/755/O73/2ODRs20LdvXxYvXhzdCmjkyJHUqlWL008/nZNPPpnq1aszY8YMbr/9dmbOnBl93qRJkyhTpgynnHIKTzzxBNOmTWPFihW8++67XHPNNTRs2BCI9MD26NGDFStWMGrUKHbt2sXAgQM588wzue222/jZz34GQIcOHejQoQOtW7dm+vTpjBo1iqZNm3L22Wfz6aefsnHjxgN+5vvvvz86nHnDhg18/PHHlC1blgEDBtChQweaNm3K/fffz6RJk+jcuTPffvstl156Kb/5zW+i1yYyA2xhKV0Dti2NdxWSJElSwjlUj2l6evoh27Oysg67x/X7nnvuOR599FHy8/O56aabuOOOO0hOTua2225j9OjRQGTI71VXXcWFF17IlVdeyfLly3nggQcYOHAgJ598crSGm266iXnz5nHWWWfx6quvkpWVRdWqVenUqVP0XqVKleK3v/0tv/71r5kyZQrPPPMMS5YsYePGjaxatYq0tDSmTp1KamoqtWvXZseOHdH3JScnU65cOSAyh/X7Xn/9ddatW0fJkiVJS0sjJSXlgGvy8vI49dRTGTp0KB07dqRfv35MnjyZ5557DoC5c+cyePDg6KrG69atY/fu3Zx00km8+eabADz66KO0adPmiH7fRcEAW1jK1IRV78e7CkmSJEnArFmzqFKlCps2baJjx45cfvnl0bmt8+bNo1u3btx1113079+f9PR0XnnlFebPn09SUhIPPfQQd9xxB4MGDeIPf/gDV1xxBW+//TY7d+7kpptu4sEHH6Rq1apkZWWxcOHC6DPPPffc6CrDPXv2pHTp0jzzzDP06tWLUaNG8Ze//IWUlBTGjx/P448/Hn3fmjVrAJg9e3b0tRtvvJEbb7yRMAyZP38+EydO5Oc//znvvvsuCxYsYMOGDXTp0iV6fVJSEqNHj+aCCy7gjTfe4J577uGiiy5iypQp3HfffQwcODC66vE+48aNY+XKlQW2AUp0BtjCUrombF8Ge3ZCcmq8q5EkSZKOay1atKBp06Y89dRTDB06lMaNG0fb+vfvz9tvv01ubi5Dhw6NDtndt8hSpUqVePnll1m6dCmpqd/9v/3SpUu57rrronNU582bx1VXXcUNN9xwwPN79epFmTJleP3118nIyCAtLY0rrriCRx55hG7dutGtW7fD+jmCIGDq1Kk0a9aMUaNG0b9/f3r27Mm7775bIIy2b9+eefPmMWjQIIYPH06dOnUAeOKJJ3j22WeZNm1agf1li6sgDMN41/CjsrOzw/3/NSIhLfkLzOwJF/0HMuvGuxpJkiQpbhYuXBid7yl93w99PoIgmBOGYfaPvdd9YAtLga10JEmSJEmFzQBbWErXiBxdyEmSJEmSYsIAW1hKVYWkkm6lI0mSJEkxYoAtLEnJkF7dACtJkiRJMWKALUxlajoHVpIkSdJPdv3117Nr1y6+/fZbnnrqKf74xz8ybtw47rrrLrZt2wbAO++8w//8z/8QhiGvv/46NWrUoGXLlrRs2ZJGjRpF7/XOO+9EX2/ZsiWZmZkFzidPnhyvH/OoGWALU+ma9sBKkiRJCeQPf/gDlStXZvv27Qe0jRo1igcffPCg733wwQepV68ebdu2pXXr1nTu3JmNGzcWSl3z589n6tSp0fO5c+fSpk0bBgwYwOTJk/nHP/7BK6+8wocffsi///1vADp06EDlypV57733AOjXrx8zZ85k5syZVKhQIXqvE088ka5duzJz5kyGDh3KpZdeyv/+7/+Sk5PDVVddRYkSxXc3VQNsYSpTE3augd1b412JJEmSJOCll16ie/fu/PWvfz2i9991113k5OQwffp0Tj/9dEaNGlUodb322mt89tlnALz//vtUqVKFBx98kK5du9KqVStOP/102rZtS+PGjSldunT0fQ8//DDnnXcepUqV4qmnnqJBgwY0aNCApKTvol3Dhg2ZOXMmt956K5deeilt2rTh6aefZvDgwfzzn/+kXbt2hfIzxEPxjd6JKLoS8VdQ7tS4liJJkiQd73JycqhduzZ9+vThyiuv5IYbbmDGjBnceeedlC5dmhIlStCqVSsA7r77bmbMmMH27dtp2LDhDwberVu30rp1awDGjx/P0KFDSUlJoX79+owYMQKA3r178/nnn7N7927uvvtuunTpwjPPPMOzzz5LUlISZ511Fvfeey+jR48mJSWF5s2b8/TTT5ORkcEbb7xBq1atSE1NJTU1lW3btlGnTh1mzZpFs2bNuPzyy3nvvffYvHkzQRAwYMCAAvV9/fXXVK9endTUVJ5//nnefvttzjrrLG6++WYGDx5M8+bNqV27NikpKTH+zceOAbYw7b8XrAFWkiRJgjn9YMO8wr1n+dPg58N+9LJRo0Zxww03UL9+fdLT05kxYwa33HILL7/8Mg0aNODmm28GYP369VSvXp3HHnuMPXv20KhRI9asWQPA0KFDGTduHKtXr2bnzp307NmTdevW8etf/5q5c+eSkZHBXXfdxbPPPksYhpQtW5Zp06axZcsWsrOzad++Pc899xwjRozgjDPOYMSIEVSqVImePXty0kkn0aJFC5KSkpg1axYpKSmceOKJvP/++6SnpwOwbNky5s+fD8CECROiAbpSpUokJSVx77338vvf/54SJUpQqlQpAGbNmsUDDzzAueeey8qVK2nXrh0vvvgiX375JVOmTKFfv35cc801hfs3KSIG2MJUem+AdR6sJEmSFFcbNmzgrbfeYtOmTYwaNYrt27fzpz/9ieXLl9OgQQMAzjnnHBYtWkRGRgYrVqygW7duZGRksG3btujCSXfddRd9+vQB4OWXX6Z37948/vjjnHrqqWRkZADQrl073n77bcIw5IILLgAgIyODxo0bs2TJ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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x124756b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(16, 8))\n",
    "ax = fig.add_subplot(111)\n",
    "ax.plot([1, 200], [dt_stump_err]*2, 'k-', label='决策时弱分类器错误率')\n",
    "ax.plot([1, 200], [dt_err]*2, 'k--', label='决策树模型错误率')\n",
    "ada_err = np.zeros((200,))\n",
    "for i, pred_y in enumerate(ada.staged_predict(test_X)):\n",
    "    ada_err[i] = zero_one_loss(pred_y, test_y)\n",
    "ax.plot(np.arange(200)+1, ada_err, label='AdaBoost错误率', color='orange')\n",
    "ax.set_xlabel('迭代次数')\n",
    "ax.set_ylabel('错误率')\n",
    "leg = ax.legend(loc='upper right', fancybox=True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
